# 文件名: lib/utils/log_loader.py
import lib.log.development as dev_log
import lib.log.local as local_log
import lib.log.production as pro_log
from lib.utils.config_loader import load_config
import threading

# 用于存储日志记录器实例的缓存
logger_cache = {}
app_config = load_config('app.ini')  # 加载应用配置文件
environment_mode = app_config.get('app', 'environment')
lock = threading.Lock()


def get_logger():
    """
   获取一个基于当前运行环境的日志记录器实例。

   该函数首先从缓存中尝试获取日志记录器，如果缓存中不存在，则根据配置文件中定义的运行环境（LOCAL, PROD, DEV）
   来创建并缓存一个新的日志记录器实例。

   返回:
       日志记录器实例，根据不同的环境配置，返回不同配置的日志记录器。
   """
    global logger_cache, environment_mode
    # 检查环境模式是否合法
    if environment_mode not in {'LOCAL', 'PROD', 'DEV'}:
        raise ValueError("运行环境异常")

    # 使用锁确保线程安全
    with lock:
        # 检查缓存中是否已存在日志记录器实例
        if environment_mode in logger_cache:
            return logger_cache[environment_mode]

        # 根据环境模式创建日志记录器
        if environment_mode == 'LOCAL':
            logger = local_log.setup_logger(__name__, 'app.log')
        elif environment_mode == 'PROD':
            logger = pro_log.setup_logger(__name__, 'app.log')
        else:  # DEV 环境
            logger = dev_log.setup_logger(__name__)

        logger.debug(f"当前开发模式: {environment_mode}")

    # 将创建的日志记录器存储到缓存中
    logger_cache[environment_mode] = logger

    return logger
